
import Vue from 'vue'
import Vuex from 'vuex'
// 导入本地持久化token的方法
// 全部按需导出储存:* as 名字(对象)
import * as auth from '../utils/auth'
// 导入登录接口请求方法
import { login } from '../api/user'
console.log('* as 对象 => 获取模块所有导出:', auth)

Vue.use(Vuex)

export default new Vuex.Store({
  // State是用来存放数据的，通常将全局数据将保存在这里。
  state: {
    // 存储登录后用户的token信息 :{token:string,refresh_token:string}
    // 获取token,要是没获取就给个空对象
    user: auth.getToken() || {}
  },
  // Mutation 使用来修改state中的数据，不支持异步修改。
  mutations: {
    // 修改的方法
    // 存储
    setToken (state, token) {
      // 1.存到内存
      state.user = token
      // 2.存到本地(硬盘)
      auth.setToken(token)
    },
    // 删除
    delToken (state) {
      state.user = {}
      auth.delToken()
    }
  },
  // Action 和 Mutation 都是修改state中的数据，唯一的区别就是Action支持异步调用Mutation来修改。
  actions: {
    // 登录接口请求
    /**
     *
     * @param {*} param0
     * @param {*} form {mobile:手机号,code:验证码}
     */
    async getToken ({ commit }, form) {
      const { data } = await login(form)
      console.log('token:', data)
      // commit === 页面中 this.$store.commit
      commit('setToken', data)
    }
  },
  // store分割成模块，每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块，这样的话就解决了多人写作开发中同名数据发生冲突导致被修改。
  modules: {
  }
})
